import java.awt.Desktop;
import java.awt.Event;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Vector;

import javax.print.DocFlavor.READER;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.engine.util.JRStyledText.Run;

import org.hibernate.criterion.Restrictions;
import org.pdfbox.examples.persistence.AppendDoc;
import org.pdfbox.exceptions.COSVisitorException;

import rep.Estado_Cuenta_General;
import rep.Estado_Cuenta_Ventas_Cliente;
import bean.Documento;

import vista.frmGestionarCompra;

import controlador.ControladorConsultarDeudaCliente;
import controlador.ControladorGestionarCliente;
import controlador.ControladorGestionarCompra;
import controlador.ControladorGestionarFresa;
import controlador.ControladorGestionarProducto;
import controlador.ControladorGestionarUnidades;
import controlador.ControladorGestionarUsuario;
import controlador.ControladorGestionarVenta;
import controlador.ControladorImpresora;
import controlador.ControladorInicio;
import controlador.ControladorConsultarDeudaCliente;


import dao.imp.Base_DatosDAO;
import modelo.Cliente;
import modelo.Compra;
import modelo.Cuenta;
import modelo.Detalle_Cliente_Compra;
import modelo.Detalle_Compra;
import modelo.Detalle_Venta;
import modelo.Empresa;
import modelo.Fresa;
import modelo.Producto;
import modelo.Reporte;
import modelo.Tipo_Compra;
import modelo.Tipo_Pago;
import modelo.Unidad;
import modelo.Usuario;
import modelo.Venta;


public class Principal {
	public static void main(String[] args) throws JRException {
		Base_DatosDAO conexion = new Base_DatosDAO();
		/*Cliente cliente = new Cliente("3867151", "xiomara", "torres", "04145213209", "Bqto", 'a');
		conexion.save(cliente);*
		System.out.println("cliente registrado exitosamente");*/
		/*Cliente cliente2 = (Cliente) conexion.findByProperty(Cliente.class, Restrictions.eq("cedula_rif", "3867151")).get(0);
		System.out.println(cliente2.getCedula_rif());
		System.out.println(cliente2.getPagos().size());*/
		/*Fresa fresa = new Fresa("0001", "Punta y Cola", 'a');
		conexion.save(fresa);
		System.out.println("fresa registrada exitosamente");*/
		/*Tipo_Compra tipo_compra = new Tipo_Compra("1", "Por medianero", 'a');
		conexion.save(tipo_compra);*/
		/*Tipo_Compra tipo_compra= (Tipo_Compra) conexion.findByProperty(Tipo_Compra.class, Restrictions.idEq("1")).get(0);
		Compra compra = new Compra("J-4545454-8", 1, new Date(),tipo_compra, 'a');
		conexion.save(compra);*/
		/*List<Cliente> clientes = conexion.findByProperty(Cliente.class, Restrictions.eq("estatus",'a'));
		for (int i=0;i<clientes.size();i++){
			Detalle_Cliente_Compra detalle_cliente_compra = new Detalle_Cliente_Compra(clientes.get(i), 1);
			conexion.save(detalle_cliente_compra);
		}*/
		/*List<Fresa> fresas = conexion.findByProperty(Fresa.class, Restrictions.eq("estatus",'a'));
		for (int i=0;i<fresas.size();i++){
			Detalle_Compra detalle_compra = new Detalle_Compra(1, fresas.get(i), 2, 3.1, 30, 5);
			conexion.save(detalle_compra);
		}*/
		/*Compra compra = (Compra) conexion.findByProperty(Compra.class, Restrictions.idEq(1)).get(0);
		List<Detalle_Cliente_Compra> detalle_clientes_compra=compra.getClientes_compra();
		for (int i=0;i<detalle_clientes_compra.size();i++){
			System.out.println(detalle_clientes_compra.get(i).getCliente().getCedula_rif());
		}
		List<Detalle_Compra> fresas = compra.getFresas_compra();
		for (int i=0;i<fresas.size();i++){
			System.out.println(fresas.get(i).getFresa().getCodigo());
		}
		System.out.println(compra.MontoTotalCompra());*/
		/*Unidad unidad = new Unidad("UNID-1", "Docenas", 'a');
		conexion.save(unidad);
		Producto producto = new Producto("PROD-1", "Veneno MataX", unidad, 'a');
		conexion.save(producto);*/
		/*Usuario usuario = new Usuario("root", "20642860", 'a');
		conexion.save(usuario);*/
		Cliente cliente = (Cliente)conexion.findByProperty(Cliente.class, Restrictions.idEq("V-1201807")).get(0);
		Empresa empresa = (Empresa)conexion.findByProperty(Empresa.class, Restrictions.eq("estatus", 'a')).get(0);
//						Reporte report = new Reporte();
//						List<Venta> ventas = empresa.getVentas();
//						List<Compra> compras = empresa.getCompras();
//						List pagos = empresa.getPagos();
//						report.setListas(compras, ventas, pagos);
//						List datos = new ArrayList();
//						datos.add(report);
//						
//						JasperReport reporte = (JasperReport) JRLoader.loadObject("rep/jasper/estado_cuenta_general.jasper");
//					 	HashMap<String, Object> map = new HashMap<String, Object>();
//					 	map.put("Cuenta", "Enero 2012");
//					 	map.put("Cliente", "Elam Elio Guillermo Torres");
//					 	map.put("Identificacion", "V-20642860");
//						map.put("SUBREPORT_DIR", "/home/elam/Escritorio/SACFRE/rep/jasper/");
//				        JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, map, new JRBeanCollectionDataSource(pagos));
//				        JRExporter exporter = new JRPdfExporter(); 
//				        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
//				        exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("/home/elam/Escritorio/SACFRE/rep/imp/EstadoCuentaPagos.pdf")); 
//				        exporter.exportReport();
//						List docs = new ArrayList();
//						docs.add(new Estado_Cuenta_General(cliente.getCuentas().get(0), "/home/elam/Escritorio/SACFRE/rep/jasper/estado_cuenta_general.jasper","/home/elam/Escritorio/SACFRE/rep/imp/","/home/elam/Escritorio/SACFRE/rep/jasper/"));
//						ControladorImpresora.getInstacia(docs);
//				        AppendDoc twin = new AppendDoc();
//				        try {
//							twin.doIt("/home/elam/Escritorio/SACFRE/rep/imp/EstadoCuentaCompras.pdf", "/home/elam/Escritorio/SACFRE/rep/imp/EstadoCuentaVentas.pdf", "/home/elam/Escritorio/SACFRE/rep/imp/EstadoCuenta.pdf");
//						} catch (COSVisitorException e1) {
//							// TODO Auto-generated catch block
//							e1.printStackTrace();
//						} catch (IOException e1) {
//							// TODO Auto-generated catch block
//							e1.printStackTrace();
//						}
//						try {
//							File file = new File("/home/elam/Escritorio/SACFRE/rep/imp/EstadoCuentaPagos.pdf");
//							Desktop.getDesktop().open(file);
//						} catch(Exception e) {
//							e.printStackTrace();
//						}
	        
		/*	Venta venta = new Venta(1, new Date(), "J-4545454-8", cliente,'a');
		conexion.save(venta);*/
		/*Producto producto = (Producto) conexion.findByProperty(Producto.class, Restrictions.idEq("PROD-1")).get(0);
		Detalle_Venta detalle = new Detalle_Venta(1, producto, 120.65, 3);
		conexion.save(detalle);*/
		
		//Tipo_Pago tipo = new Tipo_Pago("sdsd2", "Descuenteo", 'a');
		//Cuenta cuenta = new Cuenta("sdsdssds",cliente , new Date());
		//conexion.save(tipo);
		//conexion.save(cuenta);
		//Empresa empresa = new Empresa("J-4545454-8", "FresaCoorp", "55555555", "La Quebrada", 'a');
		/*System.out.println(empresa.getFresas().get(0).getNombre());
		System.out.println(empresa.getClientes().get(0).getNombre());
		System.out.println(empresa.getCompras().get(0).getNumero());
		System.out.println(empresa.getRif());*/
		//System.out.println(empresa.Compras_Cliente(empresa.Buscar_Cliente("20642860")).size());
	/*	System.out.println(empresa.Total_Compra_Cliente(empresa.Buscar_Cliente("20642860")));
		System.out.println(empresa.Total_Venta_Cliente(empresa.Buscar_Cliente("20642860")));
		String ubicacion=empresa.getUbicacion().replace(" ","");
		System.out.println(ubicacion.toUpperCase());*/
		/*	try {
			String fecha= new Date().toLocaleString();
			String fecha1= "("+fecha.substring(0, 2)+"-"+fecha.substring(3, 5)+"-"+fecha.substring(6, 10)+")";
			Runtime.getRuntime ().exec ("pg_dump -F c -b -v -f /home/adriana/Escritorio/SACFRE/bd/SACFRE"+fecha1+".backup SACFRE");
		} catch (IOException e) {
			e.printStackTrace();
		}*/
	//	empresa.Generar_Codigo_Fresa();
		//new ControladorGestionarCliente();
	//	//new ControladorGestionarFresa();
		//new ControladorGestionarProducto();
	//	new ControladorGestionarFresa();
	//	new ControladorGestionarCompra();
		//new ControladorGestionarUsuario();
		//new ControladorGestionarUnidades();
	//	new ControladorGestionarVenta();
		//new ControladorConsultarDeudaCliente();
		new ControladorInicio();
		//frmGestionarCompra compra = new frmGestionarCompra();
		//compra.setVisible(true);
	/*	Cliente cliente = empresa.Buscar_Cliente("20642860");
		cliente.setTelefono("04262583979");
		cliente.setUbicacion("Barquisimeto");
		empresa.Actualizar_Cliente(cliente);*/
		/*Fresa fresa = empresa.getFresas().get(0);
		fresa.setNombre("sfddfs");
		empresa.Actualiza_Fresa(fresa);*/
		/*Cliente cliente = empresa.getClientes().get(0);
		cliente.setNombre("Guillermo");
		empresa.Actualizar_Cliente(cliente);*/
		//new ControladorConsultarDeudaCliente();
	}
}
